--参数 key1: couponId ，key2:userId，key3:queueId
-- argv1: uid
--local cjson = require "cjson"

--获取库存参数
local count = redis.call('get', KEYS[1]);
--如果库存不足则返回0
if(tonumber(count) <= 0) then
    return 0;
end
--判断是否一人一单，如果不存在则添加进已抢到名单
local i = redis.call('sadd',KEYS[2],ARGV[2]); 
--如果等于0表示已抢到，返回0
if(tonumber(i) == 0) then
    return 0;
end
--库存-1
redis.call('incrby',KEYS[1],-1);
--添加一人一旦已经完成了，这里不做处理
--推进阻塞队列
--redis.call('lpush',KEYS[3],ARGV[1])
--创建流，如果等于0就表示还没有创建，需要创建
--if redis.call('XLEN',KEYS[3]) == 0 then 
--    --XADD order * name zs age 18
--    --id = redis.call('XADD',KEYS[3],'*','','')
--    
--    --创建组
--    redis.call('XGROUP','create',KEYS[3],KEYS[4],'$')
--end

--local ok, err  = pcall( function()
--    redis.call('XINFO','STREAM','stream:order')
--end
--)
--if tonumber(ok) == 1 then
--    redis.call('XGROUP','create',KEYS[3],KEYS[4],'$')
--end

--XADD order * name ls age 20
redis.call('XADD',KEYS[3],'*',KEYS[3],ARGV[1])
--redis.call('XADD','order','*',KEYS[3],ARGV[1])

--返回空表示成功
return nil
 